/*

匹配服务集群
    管理节点负责所有应用分配匹配处理节点
    处理节点处理应用的匹配队列
        中止任务，则所有已经处理的匹配全部视为匹配失败
设计集群模块的任务管理封装：
        分配任务：分配任务和中止任务
        反馈任务：该任务有问题了
        任务所属节点、节点下的所有任务
    
帧同步数据同步验证模块


配套数据库
分应用
匹配服务
每个应用匹配服务表,记录应用最后处理服务标识以及最后处理心跳(10秒更新一次)
启动服务, 查找没有匹配服务的应用(空或者心跳超时的应用),并更新标识为自身
每个应用都有自己的匹配队列, 服务拉取自己负责应用的匹配队列,根据匹配规则进行匹配
匹配对象(分组标识,匹配实体:玩家|队伍,匹配属性)
匹配抽象为接口,传入(房间管理器,同组的其他匹配对象,当前匹配对象),返回匹配成功的房间信息
根据匹配规则实现,决定房间在什么时候创建
    1.如果没有匹配的其他匹配对象,允许先创建房间在里面等待的,就可以先创建好
    (如吃鸡那样的大房间,第一个匹配的先创建好房间, 然后这个时候开始匹配的直接加入这个房间)
    2.必须等待匹配到所有要求的匹配对象,才会创建房间
    (如人数对战,1v1,当前只有一个人,不创建机器人的情况下,没办法先创建房间,不然人进来很奇怪)
除了队列有新匹配进来才触发, 还要有定时触发, 并且匹配对象里要放开始等待时间, 方便匹配规则里实现超时事件, 以及超时加入机器人等规则
暂时只用单线程处理,加上同应用是在同服务里的, 所以暂时不用考虑并发和原子性问题(即当下认为还没匹配到,去修改匹配状态,但另一个线程也同时这么做了)
    需要时只要加入一个递减key来确认提交修改是否成功,失败则从匹配队列里删除,重新来
创建好房间后,同时分配游戏服务器,返回房间信息里带有服务器信息

分配游戏服务器(原则:同房间的要在同一台服务器上),wx小程序有域名限制
    游戏服务器的serverWSUrl字段,配置能连到自己的地址
    如果是单台那无所谓
    如果是要做集群,又要在微信小游戏上,则需要上反向代理服务器(如nginx)
        配置根据参数或者url来识别后端服务器,参数可以是域名一部分,如:wss://game.a.com/?srv=n1
        nginx根据srv参数,转到ws://n1.game.a.com/去
    

*/